package concursos.daos;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

import concursos.modelos.Conteudo;
import concursos.modelos.Referencia;
import concursos.modelos.ReferenciaArquivo;
import concursos.modelos.ReferenciaLink;
import concursos.modelos.ReferenciaLivro;

public class ReferenciaDAO {

	private EntityManager manager;

	public ReferenciaDAO(EntityManager manager) {
		this.manager = manager;
	}


	public void excluirReferenciaLink(ReferenciaLink referenciaLink) {
		this.manager.remove(manager.getReference(ReferenciaLink.class,
				referenciaLink.getId()));
	}
	
	public void excluirReferenciaLivro(ReferenciaLivro referenciaLivro) {
		System.out.println("Removendoo.. " + referenciaLivro.getAutor());
		ReferenciaLivro temp = this.manager.find(ReferenciaLivro.class, referenciaLivro.getId());
		System.out.println("O livro é " +  temp.getLivro());
		this.manager.remove(temp);
	}
	
	public void excluirReferenciaArquivo(ReferenciaArquivo referenciaArquivo) {
		this.manager.remove(manager.getReference(ReferenciaArquivo.class,
				referenciaArquivo.getId()));
	}

	public List<Referencia> listarReferencia(int id) {
		TypedQuery<Referencia> query = this.manager.createQuery(
				"Select x from Referencia x where x.disciplina.id = :id", Referencia.class);
		query.setParameter("id", id);
		return query.getResultList();
	}

	public Referencia buscaPorId(int id) {
		Referencia referencia = this.manager.find(Referencia.class, id);
		return referencia;
	}

	public List<Referencia> buscarPorDisciplina(int id) {
		TypedQuery<Referencia> query = this.manager
				.createQuery("Select x from Referencia x"
						+ " where x.disciplina.id = :id", Referencia.class);
		
		query.setParameter("id", id);
		
		return query.getResultList();
	}

	public void adicionarReferenciaLink(ReferenciaLink referenciaLink) {
		if (referenciaLink.getId() == 0)
			this.manager.persist(referenciaLink);
		else{
			ReferenciaLink temp = this.manager.find(ReferenciaLink.class, referenciaLink.getId());
			temp.setDescricaoReferencia(referenciaLink.getDescricaoReferencia());
			temp.setLink(referenciaLink.getLink());
			this.manager.merge(referenciaLink);
		}
	}

	public void adicionarReferenciaLivro(ReferenciaLivro referenciaLivro) {
		if(referenciaLivro.getId() == 0)
			this.manager.persist(referenciaLivro);
		else{
			ReferenciaLivro temp = this.manager.find(ReferenciaLivro.class, referenciaLivro.getId());
			temp.setAutor(referenciaLivro.getAutor());
			temp.setLivro(referenciaLivro.getLivro());
			this.manager.merge(referenciaLivro);
		}
	}

	public void adicionarReferenciaArquivo(ReferenciaArquivo referenciaArquivo) {
		this.manager.persist(referenciaArquivo);
	}

	public List<Referencia> listarReferenciaLivro(int id) {
		TypedQuery<Referencia> query = this.manager.createQuery(
				"Select x from ReferenciaLivro x where x.disciplina.id = :id", Referencia.class);
		query.setParameter("id", id);
		return query.getResultList();
	}

	public List<Referencia> listarReferenciaLink(int id) {
		TypedQuery<Referencia> query = this.manager.createQuery(
				"Select x from ReferenciaLink x where x.disciplina.id = :id", Referencia.class);
		query.setParameter("id", id);
		return query.getResultList();
	}

	public List<Referencia> listarReferenciaArquivo(int id) {
		TypedQuery<Referencia> query = this.manager.createQuery(
				"Select x from ReferenciaArquivo x where x.disciplina.id = :id", Referencia.class);
		query.setParameter("id", id);
		return query.getResultList();
	}

}
